package com.shop.shoppingmall.service;

import com.shop.shoppingmall.entity.OrderEntity;
import com.shop.shoppingmall.entity.ShOrder;
import com.shop.shoppingmall.entity.ShWallet;
import com.shop.shoppingmall.util.api.vo.Result;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 订单表(ShOrder)表服务接口
 *
 * @author makejava
 * @since 2020-10-12 15:33:33
 */
public interface ShOrderService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ShOrder queryById(String id);

    /**
     * 新增数据
     *
     * @param / 实例对象
     * @return 实例对象
     */
    Result insertOrder(ShOrder shOrder);

    /**
     * 用户购买商品确认订单
     * @param categorylist
     * @param sumPrice
     * @param sums
     * @param shWallet
     * @return
     */
    Result confirmOrder(List<OrderEntity> categorylist,Integer sumPrice, Integer sums, ShWallet shWallet);

    /**
     * 修改数据
     *
     * @param shOrder 实例对象
     * @return 实例对象
     */
    ShOrder update(ShOrder shOrder);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(String id);

    /**
     * 根据用户id查询订单
     * @param map
     * @return
     */
    Result queryUserId(Map map);

    /**
     * 根据订单的实体信息进行查询
     * @param map
     * @return
     */
    Result queryAll(Map map);

    /**
     * 下订单
     * @param
     * @param
     * @return
     */
    Result insertOrderAll(HttpServletRequest request, String jsonRequest);

    /**
     * 查询订单不同状态的数量
     * @param request
     * @return
     */
    Result selectShOrderStatus(HttpServletRequest request);

    /**
     * 取消订单
     * @param orderNumber 订单号
     * @return
     */
    Result cancelOrder(String orderNumber);

    Result selectAll();

    /**
    * 店铺查询根据merchantId查询该店铺的所有订单
     * merchantId  必传
     * @param map
     * @return
     */
    Result queryMerchant(Map map);

    /**
     * 店铺处理代发货订单 修改状态保存快递单号
     * @param orderNumber 订单号
     * @param courierNum 快递单号
     * @return
     */
    Result updateState(String orderNumber,String courierNum);


     void appAliPayNotify(HttpServletRequest request);

     Map<String, Object> payRequest(String orderId) throws Exception ;

    /**
     * 修改状态
     * @param shOrder
     * @return
     */
    Result updateOrder(ShOrder shOrder);

    Result market(String number);

}
